package com.home_school_platform.dao;

import com.home_school_platform.entity.pojo.HomeWork;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 作业Dao
 * @author 卓汉杰
 * */
@Repository
@Mapper
public interface HomeWorkDao {

    /**
     * 添加一条作业
     * @param homeWork 需要添加的作业实体
     * @return 影响行数
     * */
    Integer insertHomeWork(HomeWork homeWork);

    /**
     * 根据id删除一条作业信息
     * @param id 需要删除的作业id
     * @return 影响行数
     * */
    Integer deleteHomeWorkById(Integer id);

    /**
     * 根据id修改一条作业
     * @param homeWork 需要修改的作业实体
     * @return 影响行数
     * */
    Integer updateHomeWorkById( HomeWork homeWork);

    /**
     * 根据id查询作业
     * @param id 需要查询的作业的id
     * @author id对于的作业实体
     * */
    HomeWork getHomeWorkById(Integer id);

    /**
     * 根据班级外键查询所有作业(并根据创建时间排序好)
     * @param teamId 对应的班级主键
     * @param currentPage 当前页
     * @param pageSize 每页显示多少条记录
     * @return 作业列表
     * */
    List<HomeWork> listHomeWork(@Param("teamId") Integer teamId,
                               @Param("currentPage") Integer currentPage,
                               @Param("pageSize") Integer pageSize);

    /**
     * 统计一个班级的所有作业
     * @param teamId 班级id
     * @return 一个班级对于的作业的数量
     * */
    Integer countHomeWork(@Param("teamId") Integer teamId);

    /**
     * 根据班级和科目查询作业
     * @param teamId 对应的班级主键
     * @param type 需要查询的科目
     * @param currentPage 当前页
     * @param pageSize 每页显示多少条记录
     * @return 作业列表
     * */
    List<HomeWork> listHomeWorkByType(@Param("teamId") Integer teamId,
                                @Param("type") String type,
                                @Param("currentPage") Integer currentPage,
                                @Param("pageSize") Integer pageSize);

    /**
     * 统计一个班级中的某个科目的作业数量
     * @param teamId 对应的班级主键
     * @param type 需要查询的科目
     * */
    Integer countHomeWorkByType(@Param("teamId") Integer teamId,
                                @Param("type") String type);




}
